﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;

namespace GymMaster.View.Venda
{
    public partial class Venda : BasePageGymMaster
    {
        #region variables

        int idProduto;
        decimal valorProduto;
        String nomeProduto;
        int valorUnidMedida;
        String unidMedida = "";

        #endregion

        #region metodos

        private List<String> buscaListaVenda()
        {
            List<String> values = new List<String>();
            //values.Add(1, lbl1.Text); //cabecalho
            values.Add(lbl2.Text);
            values.Add(lbl3.Text);
            values.Add(lbl4.Text);
            values.Add(lbl5.Text);
            values.Add(lbl6.Text);
            values.Add(lbl7.Text);
            values.Add(lbl8.Text);

            return values;
        }

        private void exibeListaVenda(List<String> values)
        {
            lbl2.Text = values[values.Count - 7];
            lbl3.Text = values[values.Count - 6];
            lbl4.Text = values[values.Count - 5];
            lbl5.Text = values[values.Count - 4];
            lbl6.Text = values[values.Count - 3];
            lbl7.Text = values[values.Count - 2];
            lbl8.Text = values[values.Count - 1];

            ibt2.Visible = "".Equals(lbl2.Text) ? false : true;
            ibt3.Visible = "".Equals(lbl3.Text) ? false : true;
            ibt4.Visible = "".Equals(lbl4.Text) ? false : true;
            ibt5.Visible = "".Equals(lbl5.Text) ? false : true;
            ibt6.Visible = "".Equals(lbl6.Text) ? false : true;
            ibt7.Visible = "".Equals(lbl7.Text) ? false : true;
            ibt8.Visible = "".Equals(lbl8.Text) ? false : true;
        }

        private void insereListaVenda(String desc)
        {
            List<String> values = new List<String>();
            values = buscaListaVenda();
            values.Add(desc);

            exibeListaVenda(values);
        }

        private void zeraListaVenda()
        {
            List<String> values = new List<String>();
            values.Add("");
            values.Add("");
            values.Add("");
            values.Add("");
            values.Add("");
            values.Add("");
            values.Add("");
            exibeListaVenda(values);
        }

        private void calculaTotal()
        {
            Decimal total = 0;
            string[] parts = Session["ListaVenda"].ToString().Split(new char[] { ',', ';' });
            for (int i = 1; i < parts.Length; i++)
            {
                if (i % 2 == 0)
                {
                    total = total + Convert.ToDecimal(parts[i]);
                }
            }
            lblTotal.Text = Convert.ToString(total / 100);
        }

        #endregion

        protected void Page_Load(object sender, EventArgs e)
        {
            if (!IsPostBack)
            {
                Session["ListaVenda"] = "";
                insereListaVenda("");
            }
            txtQtde.Focus();
        }

        protected void bntFinalizar_Click(object sender, EventArgs e)
        {
            if (lblTotal.Text == "0" || lblTotal.Text == "" || lblTotal.Text == null)
            {
                ShowMsg("Sua lista de compras está vazia.");
                return;
            }

            lblTotalPagamento.Text = lblValor.Text;
            lblFormaPagamento.Text = "Dinheiro";
            btnFinalizarPagamento.Visible = true;
            btnCancelarPagamento.Text = "Cancelar";
            lblTroco.Visible = false;
            lblTrocoPagamento.Visible = false;
            ModalPopupExtender1.Show();
        }

        protected void btnCancelar_Click(object sender, EventArgs e)
        {
            Session["ListaVenda"] = "";
            zeraListaVenda();

            lblProduto.Text = "";
            lblValor.Text = "";
            lblDataValidade.Text = "";
            lblUnidMed.Text = "";
            lblDescricao.Text = "";

            calculaTotal();
        }

        protected void ibt_Click(object sender, EventArgs e)
        {
            ImageButton b = (ImageButton)sender;
            int btn = Int32.Parse(b.ID.Substring(3));

            List<String> values = new List<String>();
            values = buscaListaVenda();

            string[] parts = Session["ListaVenda"].ToString().Split(',');
            List<String> tes = new List<String>(parts);

            int num1 = btn - 2;
            int num2 = btn - 2 - (values.Count - tes.Count);

            tes.RemoveAt(num2);
            values.RemoveAt(num1);
            values.Insert(0, "");


            String result = "";
            for (int i = 1; i < tes.Count; i++)
            {
                result = result + "," + tes[i];
            }
            Session["ListaVenda"] = result;
            exibeListaVenda(values);

            calculaTotal();
        }

        protected void EventHandler(object sender, EventArgs e)
        {
            String produtos = Session["ListaVenda"].ToString();

            GymMasterEntities entity = new GymMasterEntities();
            var procuraProduto = (from pro in entity.PRODUTO
                                  where pro.COD_BARRAS == txtCodigoBarra.Text.Replace("_", "")
                                  select pro).ToList();
            if (procuraProduto.Count > 0)
            {
                foreach (var prod in procuraProduto)
                {
                    if (txtQtde.Text == "") txtQtde.Text = "1";
                    idProduto = prod.ID_PRODUTO;
                    valorProduto = prod.PRECO_COMPRA;
                    nomeProduto = prod.NOME;
                    valorUnidMedida = Convert.ToInt32(prod.VALOR_UNIDADE_MEDIDA);
                    if (prod.UNIDADE_MEDIDA == "Litro")
                    {
                        unidMedida = "Lt";
                    }
                    else if (prod.UNIDADE_MEDIDA == "Peso")
                    {
                        unidMedida = "Kg";
                        valorUnidMedida = valorUnidMedida / 1000;
                    }
                    else if (prod.UNIDADE_MEDIDA == "Unidade")
                    {
                        unidMedida = "un";
                    }

                    // Descricao do produto
                    lblProduto.Text = nomeProduto;
                    lblValor.Text = valorProduto.ToString();
                    lblDataValidade.Text = prod.DATA_VALIDADE.ToString();
                    lblUnidMed.Text = valorUnidMedida + " " + unidMedida;
                    lblDescricao.Text = prod.DESCRICAO;

                    // Lista de compras
                    decimal valorTotalProduto = valorProduto * Int32.Parse(txtQtde.Text);
                    produtos = produtos + "," + idProduto.ToString() + ";" + valorTotalProduto.ToString().Replace(",", ".");
                    Session["ListaVenda"] = produtos;
                    if (nomeProduto.Length > 15) { nomeProduto = nomeProduto.Remove(15); }
                    insereListaVenda(nomeProduto + " - " + txtQtde.Text + " x R$" + valorProduto.ToString());

                    break;
                }
            }
            else
            {
                lblProduto.Text = "Produto não encontrado.";
                txtCodigoBarra.Text = "";
            }
            calculaTotal();
            txtQtde.Focus();
        }

        protected void lbxFormaPagamento_SelectedIndexChanged(object sender, EventArgs e)
        {
            lblFormaPagamento.Text = lbxFormaPagamento.SelectedValue;
            txtRecebidoPagamento.Text = lblValor.Text;
            if (lbxFormaPagamento.SelectedValue != "Dinheiro")
                txtRecebidoPagamento.Enabled = false;
            else
            {
                txtRecebidoPagamento.Enabled = true;
                txtRecebidoPagamento.Text = "";
            }
            ModalPopupExtender1.Show();
        }

        protected void btnFinalizarPagamento_Click(object sender, EventArgs e)
        {
            if (decimal.Parse(txtRecebidoPagamento.Text) < decimal.Parse(lblTotalPagamento.Text))
            {
                lblTroco.Text = "Impossivel terminar<br/>valor recebido é menor que o<br/>total da compra.";
                lblTroco.Visible = true;
            }
            else
            {
                lblTrocoPagamento.Text = Convert.ToString(decimal.Parse(txtRecebidoPagamento.Text) - decimal.Parse(lblTotalPagamento.Text));
                lblTroco.Visible = true;
                lblTrocoPagamento.Visible = true;
                btnFinalizarPagamento.Visible = false;
                lblTroco.Text = "Troco: ";
                btnCancelarPagamento.Text = "Fechar";

                // Grava lista de compras
                try
                {
                    GymMasterEntities entity = new GymMasterEntities();
                    //Venda
                    VENDA venda = new VENDA();
                    venda.ID_USUARIO = 1;
                    venda.DATA_VENDA = DateTime.Now;

                    entity.AddToVENDA(venda);
                    entity.SaveChanges();

                    //Produtos

                }
                catch (Exception)
                {

                    throw;
                }
            }
            lbxFormaPagamento.Enabled = true;
            ModalPopupExtender1.Show();
        }
    }
}